package TwoWeek98;

/**
 * @author zxc
 * @date 2023/02/18 22:36
 **/

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * 题目 ：替换一个数字后的最大差值
 * 题目详述 ：
 * 给你一个整数 num 。你知道 Danny Mittal 会偷偷将 0 到 9 中的一个数字 替换 成另一个数字。
 * 请你返回将 num 中 恰好一个 数字进行替换后，得到的最大值和最小值的差位多少。
 * 注意：
 * 当 Danny 将一个数字 d1 替换成另一个数字 d2 时，Danny 需要将 nums 中所有 d1 都替换成 d2 。
 * Danny 可以将一个数字替换成它自己，也就是说 num 可以不变。
 * Danny 可以将数字分别替换成两个不同的数字分别得到最大值和最小值。
 * 替换后得到的数字可以包含前导 0 。
 *
 * 提示：
 * 1 <= num <= 10^8
 *
 */
public class MinMaxDifference {
    /**
     * 思路 ：
     *（1）求取最大值的话，则将当前数字num的最高位替换为最大数字9 && 同时需要将所替换值所有都替换成9;
     * 若是当前最高位已经是9，则递归获取下一个最高位,直至替换成功;
     *（2）求取最小值的话，则将当前数字num的最高位替换为最大数字0;
     * 若是当前最高位已经是0，则递归获取下一个最高位,直至替换成功;
     * @param num
     * @return
     */
    public int minMaxDifference(int num) {
        int[] temp = new int[9];
        int len = 0;
        while(num != 0){
            temp[len++] = num % 10;
            num /= 10;
        }
        int maxInstead = -1;
        int max = 0;
        for(int i = len - 1 ; i >= 0 ; i--){
            int value = temp[i];
            if(maxInstead == -1 && value < 9){
                maxInstead = value;
            }
            max = max * 10 + (value == maxInstead ? 9 : value);
            System.out.println(max);
        }
        System.out.println("================");
        int minInstead = -1;
        int min = 0;
        for(int i = len - 1 ; i >= 0 ; i--){
            int value = temp[i];
            if(minInstead == -1 && value > 0){
                minInstead = value;
            }
            min = min * 10 + (value == minInstead ? 0 : value);
            System.out.println(min);
        }
        return max - min;
    }
}
